package com.ek.util;
import java.util.Random;

public class GetRandomID{
	 private Random random;    
	    private String table;    
	    public GetRandomID() {    
	        random = new Random();    
	        table = "0123456789";    
	    }    
	    public String randomId() {  
	    int id=random.nextInt(10);  
	        String ret = null,    
	            num = String.format("%05d", id);    
	        int key = random.nextInt(10),     
	            seed = random.nextInt(100);    
	        Caesar caesar = new Caesar(table, seed);  
	        num = caesar.encode(key, num);    
	        ret = num     
	            + String.format("%01d", key)     
	            + String.format("%02d", seed);    
	            
	        return ret;    
	    }    
	/*    public static void main(String[] args) {    
	    	GetRandomID r = new GetRandomID();       
	        System.out.println("---------------------"+r.randomId()+"-------------------------------------");      
	    }   */ 
	      
	    public class Caesar {    
	        private String table;    
	        private int seedA = 1103515245;    
	        private int seedB = 12345;    
	            
	        public Caesar(String table, int seed) {    
	            this.table = chaos(table, seed, table.length());    
	        }    
	        public Caesar(String table) {    
	            this(table, 11);    
	        }    
	        public Caesar() {    
	            this(11);    
	        }    
	        public Caesar(int seed) {    
	            this("ABCDEFGHIJKLMNOPQRSTUVWXYZ", seed);    
	        }    
	        public char dict(int i, boolean reverse) {    
	            int s = table.length(), index = reverse ? s - i : i;    
	            return table.charAt(index);    
	        }    
	        public int dict(char c,  boolean reverse) {    
	            int s = table.length(), index = table.indexOf(c);    
	            return reverse ? s - index : index;    
	        }    
	        public int seed(int seed) {    
	            long temp = seed;    
	            return (int)((temp * seedA + seedB) & 0x7fffffffL);    
	        }    
	        
	        public String chaos(String data, int seed, int cnt) {    
	            StringBuffer buf = new StringBuffer(data);    
	            char tmp; int a, b, r = data.length();    
	            for (int i = 0; i < cnt; i += 1) {    
	                seed = seed(seed); a = seed % r;    
	                seed = seed(seed); b = seed % r;    
	                tmp = buf.charAt(a);    
	                buf.setCharAt(a, buf.charAt(b));    
	                buf.setCharAt(b, tmp);    
	            }    
	            return buf.toString();    
	        }    
	        
	        public String crypto(boolean reverse,    
	                             int key, String text) {    
	            String ret = null;    
	            StringBuilder buf = new StringBuilder();    
	            int m, s = table.length(), e = text.length();    
	        
	            for(int i = 0; i < e; i += 1) {    
	                m = dict(text.charAt(i), reverse);    
	                if (m < 0) break;    
	                m = m + key + i;    
	                buf.append(dict(m % s, reverse));    
	            }    
	            if (buf.length() == e)    
	                ret = buf.toString();    
	            return ret;    
	        }    
	        public String encode(int key, String text) {    
	            return crypto(false, key, text);    
	                
	        }    
	        public String decode(int key, String text) {    
	            return crypto(true , key, text);    
	        }    
//	        public static void main(String[] args) {    
//	            Caesar caesar = new Caesar();    
//	            String data = caesar.encode(32, "APPLE");    
//	            caesar.decode(32, data);    
//	        }    
	    }  
}